/*
 * EmisorAritmetico.h
 *
 *  Created on: 06/04/2012
 *      Author: lucas
 */

#ifndef EMISORARITMETICO_H_
#define EMISORARITMETICO_H_

#include <stdio.h>

class EmisorAritmetico {
public:
	void emitirSimbolo(unsigned short piso, unsigned short largo,
			unsigned short total);
	void finalizarEmision();
	EmisorAritmetico(FILE* archivo);
	virtual ~EmisorAritmetico();
private:
	FILE* archivo;
	FILE* archivoDebug;
	unsigned int piso;
	unsigned int techo;
	unsigned int limite;
	unsigned int underflow;
	unsigned int subBuffer; // Almacena bits a emitir
	unsigned int contadorSubBuffer; // Cuenta cantidad de bits en subBuffer
	unsigned char* buffer; // Almacena bytes a emitir
	unsigned char* proximoCaracter;
	unsigned int contadorBuffer; // Cuenta bytes emitidos en buffer
	void imprimirNumero(unsigned int n);
	void renormalizar();
	int escribirBufferEnArchivo();
	unsigned int emitirBits();
	void actualizarBuffer(unsigned int bitsAEmitir, unsigned int cantidad);
	static unsigned int tamanioBuffer;
	static unsigned int precision;
};

#endif /* EMISORARITMETICO_H_ */
